/*
274. H指数
给定一位研究者的论文被引用次数的数组（被引用次数是非负整数）。写一个方法计算出研究者的H指数。

H-index定义: “一位科学家有指数 h 是指他（她）的 N 篇论文中至多有 h 篇论文，分别被引用了至少 h 次，其余的 N - h 篇论文每篇被引用次数不多于 h 次。"

例如，给定 citations = [3, 0, 6, 1, 5]，意味着研究者总共有 5 篇论文，每篇论文相应的被引用了 3, 0, 6, 1, 5 次。由于研究者有 3 篇论文每篇至少被引用了 3 次，其余两篇论文每篇被引用不多于 3 次，所以他的 h 指数是 3。

注意： 如果 h有几个可能的值 ， h 指数是指其中最大的那个。

致谢：
特别感谢 @jianchao.li.fighter 添加这个问题并创建所有测试用例。
*/

/*
扫描数组一次,
a[0]表示引用了0次的数量
引用次数大于等于size的,放在a[size]里面
*/
class Solution
{
public:
    int hIndex(vector<int> &citations)
    {
        vector<int> a(citations.size() + 1, 0);
        int         n = citations.size();
        for(int i : citations) {
            if(i >= n) {
                a[n]++;
            } else {
                a[i]++;
            }
        }
        int sum = 0;
        for(int i = n; i >= 0; i--) {
            sum += a[i];
            if(sum >= i) {
                return i;
            }
        }
        return 0;
    }
};
